package com.example.javaairportflightanalysis.utils;

import com.example.javaairportflightanalysis.domin.dto.DfdlDto;
import com.example.javaairportflightanalysis.domin.dto.DfdlDto2;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;
@Component
public class GroupAndPageUtil {

    private static <T> Map<String, List<T>> group(List<T> list, Function<T, String> f) {
        // 使用f函数来获取对象的airlArptId属性作为分组的依据
        return list.stream().collect(Collectors.groupingBy(f));
    }

    /**
     * 将yyyyMMddHHmm ss格式的字符串转换成yyyy年MM月dd日 HH:mm:ss格式的字符串
     */
    public static String getDate(String dateStr) throws ParseException {
        String inputPattern = "yyyyMMddHHmmss";
        String outputPattern = "yyyy年MM月dd日 HH:mm:ss";
        // 创建两个SimpleDateFormat对象
        SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern);
        SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);
        // 把字符串转换成日期对象
        if (!"".equals(dateStr)) {
            Date dtime = inputFormat.parse(dateStr);
            return outputFormat.format(dtime);
        }
        return "无日期";
    }
    /**
     * 将List<DfdlDto>转换成List<DfdlDtoMerge>
     */
    public static <T> PageInfo<T> getPageInfo(List<T> mergeList, Integer pageNum, Integer pageSize) {
        // 使用stream API对mergeList进行分页查询
        List<T> pageList = mergeList.stream()
                // 跳过前面的数据
                .skip((pageNum - 1) * pageSize)
                // 限制每页的数据量
                .limit(pageSize)
                // 收集到一个新的List中
                .collect(Collectors.toList());
        // 使用PageInfo包装pageList
        PageInfo<T> pageInfo = new PageInfo<>(pageList);
        pageInfo.setTotal(mergeList.size());
        return pageInfo;
    }

    /**
     * 根据航班号分组
     */
    public static Map<String, List<DfdlDto>> groupByAirlArptId(List<DfdlDto> group) {
        // 调用GroupUtil类的group方法，传入list和f
        Function<DfdlDto, String> f = DfdlDto::getAirlArptId;
        return GroupAndPageUtil.group(group, f);
    }
    public static Map<String, List<DfdlDto2>> groupByAirlArptId2(List<DfdlDto2> group) {
        // 调用GroupUtil类的group方法，传入list和f
        Function<DfdlDto2, String> f = DfdlDto2::getAirlArptId;
        return GroupAndPageUtil.group(group, f);
    }


    public static String getUUID() {
        UUID uuid = UUID.randomUUID();
        return uuid.toString();
    }
}
